from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QStyleFactory


class ShowTabSensor:
    def __init__(self, ui, ptr):
        self.ui = ui
        self.ptr = ptr
        self.sensor_model_show = None
        self.current_model_show = None
        self.charger_model_show = None
        pass

    def init_ui(self):
        self.init_tab_sensor_group_sensor()
        self.init_tab_sensor_group_current()
        self.init_tab_sensor_group_charger()
        pass

    @staticmethod
    def init_tree_imu_show(model):
        # set item
        item = QStandardItem('IMU')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('加速度X（m/s2)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('加速度Y')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('加速度Z')
        item.appendRow(item_child)
        item.setChild(2, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('角速度X(rad/s)')
        item.appendRow(item_child)
        item.setChild(3, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('角速度Y')
        item.appendRow(item_child)
        item.setChild(4, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('角速度Z')
        item.appendRow(item_child)
        item.setChild(5, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('IMU横滚角')
        item.appendRow(item_child)
        item.setChild(6, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('IMU俯仰角')
        item.appendRow(item_child)
        item.setChild(7, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('IMU航向角')
        item.appendRow(item_child)
        item.setChild(8, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_rain_show(model):
        # set item
        item = QStandardItem('雨淋检测')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('雨淋ADC')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_lift_show(model):
        # set item
        item = QStandardItem('抬起检测')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('左抬起(1触发)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('右抬起(1触发)')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_collide_show(model):
        # set item
        item = QStandardItem('碰撞检测(<4096)')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[<4096]'))
        # 添加子条目
        item_child = QStandardItem('碰撞1(ADC)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('碰撞2(ADC)')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_ultra_show(model):
        # set item
        item = QStandardItem('超声波检测')
        model.appendRow(item)
        model.setItem(0, 1, QStandardItem('[0-255]'))
        # 添加子条目
        item_child = QStandardItem('超声波1(cm)')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波2(cm)')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波3(cm)')
        item.appendRow(item_child)
        item.setChild(2, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波4(cm)')
        item.appendRow(item_child)
        item.setChild(3, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波5(cm)')
        item.appendRow(item_child)
        item.setChild(4, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波6(cm)')
        item.appendRow(item_child)
        item.setChild(5, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波7(cm)')
        item.appendRow(item_child)
        item.setChild(6, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('超声波8(cm)')
        item.appendRow(item_child)
        item.setChild(7, 1, QStandardItem('[Object]'))

    def init_tab_sensor_group_sensor(self):
        # set table header
        self.sensor_model_show = QStandardItemModel(self.ptr)
        self.sensor_model_show.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_imu_show(self.sensor_model_show)
        self.init_tree_rain_show(self.sensor_model_show)
        self.init_tree_lift_show(self.sensor_model_show)
        self.init_tree_collide_show(self.sensor_model_show)
        self.init_tree_ultra_show(self.sensor_model_show)

        self.ui.treeView_sensor.setModel(self.sensor_model_show)

        # 调整第一列的宽度
        self.ui.treeView_sensor.header().resizeSection(0, 300)
        # 设置成有虚线连接的方式
        self.ui.treeView_sensor.setStyle(QStyleFactory.create("windows"))
        # 完全展开
        self.ui.treeView_sensor.expandAll()
        pass

    @staticmethod
    def init_tree_current_show(model):
        # set item
        item = QStandardItem('电流采样')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('AI板电流mA')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('高音报警器5V(mA)')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('超声波控制器电流mA')
        item.appendRow(item_child)
        item.setChild(2, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('驻车器电流mA')
        item.appendRow(item_child)
        item.setChild(3, 1, QStandardItem('[Object]'))

    def init_tab_sensor_group_current(self):
        # set table header
        self.current_model_show = QStandardItemModel(self.ptr)
        self.current_model_show.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_current_show(self.current_model_show)
        self.ui.treeView_current.setModel(self.current_model_show)

        # 调整第一列的宽度
        self.ui.treeView_current.header().resizeSection(0, 300)
        # 设置成有虚线连接的方式
        self.ui.treeView_current.setStyle(QStyleFactory.create("windows"))
        # 完全展开
        self.ui.treeView_current.expandAll()

    @staticmethod
    def init_tree_mower_bluetooth_show(model):
        # set item
        item = QStandardItem('割草机')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))
        # 添加子条目
        item_child = QStandardItem('蓝牙状态')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('蓝牙连接')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    @staticmethod
    def init_tree_charger_show(model):
        # set item
        item = QStandardItem('充电站')
        model.appendRow(item)
        # model.setItem(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('充电站充电电流mA')
        item.appendRow(item_child)
        item.setChild(0, 1, QStandardItem('[Object]'))

        # 添加子条目
        item_child = QStandardItem('充电站信息')
        item.appendRow(item_child)
        item.setChild(1, 1, QStandardItem('[Object]'))

    def init_tab_sensor_group_charger(self):
        # set table header
        self.charger_model_show = QStandardItemModel(self.ptr)
        self.charger_model_show.setHorizontalHeaderLabels(['item', 'value'])

        self.init_tree_mower_bluetooth_show(self.charger_model_show)
        self.init_tree_charger_show(self.charger_model_show)
        self.ui.treeView_charger.setModel(self.charger_model_show)

        # 调整第一列的宽度
        self.ui.treeView_charger.header().resizeSection(0, 300)
        # 设置成有虚线连接的方式
        self.ui.treeView_charger.setStyle(QStyleFactory.create("windows"))
        # 完全展开
        self.ui.treeView_charger.expandAll()
        pass

    def update_imu_data(self, value, child_row, child_col):
        parent_item = self.sensor_model_show.item(0)
        parent_item.child(child_row, child_col).setText(str(value))
        pass

    def update_rain_data(self, value, child_row, child_col):
        parent_item = self.sensor_model_show.item(1)
        parent_item.child(child_row, child_col).setText(str(value))
        pass

    def update_lift_data(self, value, child_row, child_col):
        parent_item = self.sensor_model_show.item(2)
        parent_item.child(child_row, child_col).setText(str(value))
        pass

    def update_collide_data(self, value, child_row, child_col):
        parent_item = self.sensor_model_show.item(3)
        parent_item.child(child_row, child_col).setText(str(value))
        pass

    def update_ultrasonic_data(self, value, child_row, child_col):
        parent_item = self.sensor_model_show.item(4)
        parent_item.child(child_row, child_col).setText(str(value))
        pass

    def update_get_current_data(self, value, child_row, child_col):
        parent_item = self.current_model_show.item(0)
        parent_item.child(child_row, child_col).setText(str(value))
        pass

    def update_charger_data(self, value, item_index, child_row, child_col):
        parent_item = self.charger_model_show.item(item_index)
        parent_item.child(child_row, child_col).setText(str(value))
        pass


